#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/3/14 21:34
# @Author : youngchaolin
# @File : 集合.py

print()

'''
集合：非常重要，这里这里暂时入门一下
集合Set属于python的基础数据类型之一，属于容器型数据类型，它要求元素是不可变的数据，如int、bool和str。
但是它本身是可变的数据类型
集合Set是无序的

集合的作用：
1 列表的去重
2 关系测试：交集、并集、差集
'''

# 集合的创建
# 1 直接创建，元素必须不可变
s1 = {1, 2, 3, True, 'messi'}
print(s1, type(s1))  # {1, 2, 3, 'messi'} <class 'set'>
# 2 使用Set创建
s2 = set({1, 2, 3, True, 'messi'})
print(s2, type(s2))

# 2 空集合
s3 = set()
print(s3, type(s3))  # set() <class 'set'>

s4 = {}
print(s4, type(s4))  # 这不是空集合，是空字典

# 3 增
set1 = {'messi', 'ronald'}
set1.add('herry')
print(set1)

# update迭代增加
set1.update('kk')
print(set1)  # {'messi', 'ronald', 'k', 'herry'} 本来两个k，去重处理了

# 4 删
set1.remove('k')
print(set1)

# 随机删除
# set1.pop()
# print(set1)

# 变相改值
# 先删除，再添加
set1.remove('herry')
set1.add('clyang')
print(set1)

# 5 交集 并集 差集
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8, 9}
# 交集 scala中是set散列也有类似操作，是&或intersect
print(set1 & set2)
print(set1.intersection(set2))

# 并集 scala中是++或者union
print(set1 | set2)
print(set1.union(set2))

# 差集 scala中是&~或者diff
print(set1 - set2)
print(set1.difference(set2))

# 反交集
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
# scala set集合操作可以参考博文https://www.cnblogs.com/youngchaolin/p/12375032.html

# 子集
set1={1,2,3}
set2={1,2,3,4,5,6}
# set1是不是set2的子集
print(set1 < set2)
print(set1.issubset(set2))

# set2是不是set1的超集
print(set2 > set1)
print(set2.issuperset(set1))

# 6 列表的去重
# 列表先转换为set，然后再转换为列表，即完成去重
l=[1,2,2,2,2,3,4,5]
s=set(l)
print(s)
l=list(s)
print(l)
# 上面的方法不能保证顺序，只能保证去重

# set的用处总结：数据之间的关系，列表去重

